<?php

/**
 * Clase controladora principal de la que heredan los controladores de la 
 * aplicacion
 * @author Robert babilonia <bobbabilon2@gmail.com>
 */
abstract class CommanderController {

    /**
     * @var string Nombre del controlador, estricta definicion del mismo para acceder a las vistas
     */
    private $name = "controller";

    /**
     * @var string indica el nombre del modulo al que pertenece el controlador 
     */
    private $module = "default";

    /**
     * @var string template que usara el controlador por defecto
     */
    private $template = "default";

    /**
     * Constructor de la clase
     * @param string $name Nombre o identificador del controlador
     * @param string $module Modulo al que el controlador pertenece
     */
    public function __construct($name, $module) {

        $this->name = $name;
        $this->module = $module;
    }

    /**
     * Cambia el identificador de un controlador
     * @param string $name
     */
    public function setName($name) {
        $this->name = $name;
    }

    /**
     * Obtiene el identificador del controlador
     * @return string
     */
    public function getName() {
        return $this->name;
    }

    /**
     * Obtiene el template asociado al controlador
     * @return string
     */
    public function getTemplate() {
        return $this->template;
    }

    /**
     * Cambia el template asociado a las vistas de un controlador
     * @param string $template Nombre del template a usar
     */
    public function setTemplate($template) {
        $this->template = $template;
    }

    /**
     * Invoca a la clase view encargada del renderizado de las vistas
     * @author Robert babilonia <bobbabilon2@gmail.com>
     * @param string $view Identificador de la vista a renderizar
     * @param array $vars Arreglo asociativo con los datos a pasar a la vista
     * @param string $template Template a usar en el momento del renderizado, si no se especifica toma el definido para el controlador
     * 
     * 
     */
    public final function render($view = NULL, $vars = NULL, $template = NULL) {

        if (!isset($template))
            CommanderView::render($this->name, $this->module, $this->template, $view, $vars);
    }

    /**
     * Verifica si un elemento o un conjunto de ellos se ha recibido por post o no
     * @param mixed $key Array o string con las claves a verificar dentro del arreglo post
     * @return boolean
     */
    public final function in_post($key = array()) {

        if (is_array($key)) {
            $flag = TRUE;
            foreach ($key as $val) {

                $flag = array_key_exists($val, $_POST);
                if (!$flag) {

                    break;
                }
            }

            return $flag;
        } else {

            return array_key_exists($key, $_POST);
        }
    }

    /**
     * Cuando SECURE_USER_BUGS esta activado este metodo registra la informacion 
     * en variables de sesion que luego seran usadas al registrar los logs
     */
    public final function put_info() {

        $datos = $_POST;

        if ($this->in_post("n")) {//se reciben los datos del cliente
            CommanderSession::register("navegador", $datos["n"]);
            CommanderSession::register("tipo", $datos["t"]);
            CommanderSession::register("version", $datos["v"]);
            CommanderSession::register("plataforma", $datos["p"]);
            CommanderSession::register("resolucion", $datos["r"]);
            $retorno['response']["booleano"] = TRUE;
        } else {

            $retorno['response']["booleano"] = FALSE;
            $retorno['response']["mensaje"] = "No se recibi&oacute; la informaci&oacute;n requerida";
        }



        $this->render('json_response', $retorno, AJAX_VIEW_DIR);
    }

}

?>